home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / patches / plr30ps5.lha / player3_0opus5 / arexx / PlayCDDA_JB.dopus5 next >
Text File  |  1995-11-10  |  22KB  |  605 lines

  1. /* Programm: PlayCDDA_JB.dopus5 [10-Oktober-1995]
  2. ** $VER: PlayCDDA_JB.dopus5 1.0 (10-Okt-1995)
  3. ** 
  4. ** Needed: Directory Opus 5.11 (© by Jonathan Potter & GPSoftware)
  5. **         Jukebox 2.0/2.1 (© 1991-1995 by Franz-Josef Reichert),
  6. **         for save: CDDA-Filesystem (© 1994-1995 by Franz-Josef Reichert)  
  7. **                   or/and:
  8. **
  9. **           only for save 8SVX & AIFF (Toshiba & Sony CDROM):
  10. **           CDDA V1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de)
  11. **           only for save ADPCM3 (Toshiba CDROM):
  12. **           CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de)
  13. **         save WAV, VOC, AU needed Amisox V3.0
  14. **
  15. **
  16. ** Copyright © 1995 Eckhard Ludwig (EMail: Eckhard@top.east.de)
  17. ** PlayCDDA_JB.dopus5 is freeware. It may be distributed freely.
  18. **
  19. ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to
  20. ** RAW, IFF 8SVX, AIFF, WAVE, VOC, AU & ADPCM3.
  21. **
  22. ** Create new button (CDDA Jukebox), Call as:
  23. ** ----------------------------------------------------------------------
  24. ** ARexx    DOpus5:ARexx/PlayCDDA_JB.dopus5 {Qp}
  25. ** ----------------------------------------------------------------------
  26. ** Set all attribut off.
  27. */
  28.  
  29. /*--------S E T T I N G S : --------------------------------------------*/
  30. /* If the file ENV:PlayCDDA_JB.PREFS exists, that one will override the */
  31. /* settings here ...                                                    */
  32.  
  33. /* Path to Jukebox (© 1991-1995 by Franz-Josef Reichert)*/
  34. CDPlay = "WORK:Jukebox/Jukebox"
  35. CDDA_FS= "Work:Jukebox/CDDA"
  36. Playmodul="Intern"
  37. MusikCat="WORK:Jukebox/musiccatalog.cat"
  38. Changeint=1
  39. Fontname= "topaz.font"
  40. Fontheight=8
  41. Device = "scsi.device"
  42. Unit   = "3"
  43. Fakedmcn="0"
  44.  
  45. Amisox= "C:SOX020"
  46.  
  47. /* Path to CDDA V1.12 */
  48. CDSave = "C:CDDA" /* only for Toshiba/Sony CDROM & save AIFF & IFF 8SVX */
  49.  
  50. /* Path to CDRipper  */
  51. CDRip = "C:CDRipper" /* only for Toshiba CDROM & save ADPCM3 */
  52.  
  53. /*-Volume Settings-----Auslaufzeit---------------------------------------*/
  54.  
  55. CDROMVOLUME=0 /* 1 to 255 ? (see doc of your cdrom !)
  56.                  0 = no volumesetting                  */
  57.  
  58. RESTTIME="00:01:00"  /* Auslaufzeit eines Titel */
  59.  
  60. /*--end of settings------------------------------------------------------*/
  61.  
  62.  
  63. /*--Hauptprogramm--------------------------------------------------------*/
  64.  
  65. if ~show('l','rexxsupport.library') then
  66.     call addlib('rexxsupport.library',0,-30,0)
  67. if ~openport('playcdda-handler') then exit
  68.  
  69. signal on syntax
  70. options results
  71. options failat 21
  72. lf='0a'x
  73.  
  74. if open(1,'env:PlayCDDA_JB.prefs','R') then do /* Environment-Variable auswerten */
  75.    do i=1 to 14
  76.     prefs.i = readln(1)
  77.         end
  78.    if prefs.2 ~="" then CDPlay=prefs.2
  79.    if prefs.3 ~="" then CDSave=prefs.3
  80.    if prefs.4 ~="" then CDRip =prefs.4
  81.    if prefs.5 ~="" then CDROMVOLUME=prefs.5
  82.    if prefs.6 ~="" then RESTTIME=prefs.6
  83.    if prefs.7 ~="" then MusikCat=prefs.7
  84.    if prefs.8 ~="" then Device=prefs.8
  85.    if prefs.9 ~="" then Unit=prefs.9
  86.    if prefs.10 ~="" then Playmodul=prefs.10
  87.    if prefs.11 ~="" then Changeint=prefs.11
  88.    if prefs.12 ~="" then Fakedmcn=prefs.12
  89.    if prefs.13 ~="" then CDDA_FS=prefs.13
  90.    if prefs.14 ~="" then Amisox=prefs.14
  91.    drop prefs.
  92.    end
  93. call close(1)
  94.  
  95. /* init locale standard=deutsch */
  96. if ~show(l,'locale.library') then
  97.         call addlib('locale.library',0,-30)
  98. if show(l,'locale.library') then
  99.         catalog=opencatalog('PlayCDDA_JB.catalog','deutsch',0)
  100.  
  101. parse arg portname
  102. if portname='' then portname='DOPUS.1'
  103. address value portname
  104.  
  105. if Playmodul="Intern" then PLMD=" "
  106.    else PLMD="PLAYER="Playmodul
  107.  
  108. if ~show('P','JUKEBOX.0') then do  /* Jukebox wird gestartet */
  109.    if ~exists(CDPlay) then do
  110.       dopus front
  111.       dopus request '"'getcatstr(0,'Fehler:'lf'Jukebox nicht gefunden (Pfad: %s ?).'lf'Setze Pfad oder starte Jukebox zuerst !',CDPlay)'"' getcatstr(1,'Beenden')
  112.       Exit
  113.       end
  114.    address command "Run >NIL: "CDPlay" PUBSCREEN=Workbench "PLMD" DEVICE="Device" UNIT="Unit" CHANGEINT="Changeint" CATALOG="MusikCat" FAKEDMCN="Fakedmcn" FONTNAME="Fontname" FONTHEIGHT="Fontheight
  115.    dopus request '"'getcatstr(20,'Bitte warten !'lf'Der externe CDDA-Player Jukebox wird gestartet.')'"' 'OK'
  116.    address command 'waitforport JUKEBOX.0'
  117. end
  118.     
  119. address 'JUKEBOX.0'   
  120. TOC 0   /* Test auf PD-Version von Jukebox, siehe result */
  121. if result='freely distributable release' then do
  122.       address value portname
  123.       dopus front
  124.       dopus request '"'getcatstr(2,'Fehler:'lf'Frei verteilbare Version von Jukebox gefunden.'lf'PlayCDDA_JB.dopus5 läuft nur mit der registrierten Version !'lf'Bitte lassen Sie sich für Jukebox registrieren.')'"' getcatstr(1,'Beenden')
  125.       call closeport('playcdda-handler')
  126.       Exit
  127.       end
  128.     
  129. if show(l,'locale.library') then
  130.         jb_catalog=opencatalog('jukebox.catalog','english',0)
  131. cdstring='<no title assigned>'  /* CD nicht im Katalog ?, von Jukebox zugeordneten Titel (sprachabhängig) ermitteln */
  132. if jb_catalog~=0 then cdstring=getcatalogstr(jb_catalog,53,cdstring)
  133.  
  134. address value portname
  135. lister new  /* Opus-Lister wird geöffnet */
  136. handle=result
  137.  
  138. do forever   /* Schleife bei CD-Wechsel */
  139.    CDDA=0
  140.    address 'JUKEBOX.0'   
  141.    MAXTRACK=numtrks() /* letzten Track ermitteln */
  142.    if MAXTRACK=0 then call Meldung1 /* Keine CD eingelegt */
  143.    STOP
  144.    CURRENT LABEL /* Label der CD aus Katalog */
  145.    cdname=result
  146.    if cdname='result' then call Ende /* Jukebox wurde beendet */
  147.    if cdname=cdstring then cdname=getcatstr(3,'CD nicht im Medienkatalog')
  148.    address value portname
  149.    lister set handle title cdname
  150.    lister set handle sort name /* Lister nach Namen (da Nummern vorangestellt werden) sortieren */
  151.    lister set handle busy on
  152.    lister set handle progress MAXTRACK getcatstr(4,'Erstelle Titelliste ...')
  153.    lister refresh handle full  
  154.    do i=1 to MAXTRACK
  155.       lister query handle abort              /* welcher Idiot will jetzt abbrechen ?*/
  156.       if result then leave
  157.       lister set handle progress count i
  158.       lister set handle progress name getcatstr(5,'Titel')'  'i
  159.       address 'JUKEBOX.0'
  160.       TOC i
  161.       if RC>0 then leave              /* falls während einlesen CD ausgeworfen wird */
  162.       TRACKINFO=result
  163.       NPOS=pos('22'x,TRACKINFO)       /* Trackinfo zerlegen */
  164.       SONGNAME=substr(TRACKINFO,NPOS+1,length(TRACKINFO)-NPOS-1)
  165.       SONGINFO=left(TRACKINFO,NPOS-2)
  166.       BLOCKS=(left(SONGINFO,2)*60+substr(SONGINFO,4,2))*75+substr(SONGINFO,7,2)
  167.       if bittst(right(SONGINFO,2),2)=1 then SONGNAME=getcatstr(6,'Daten Track') /* eine CD mit Datentracks */
  168.          else CDDA=1    /* wenigsten ein Audio-Track sollte drauf sein */
  169.       j=right(i,2)
  170.       address value portname   
  171.       lister add handle '"'j" "SONGNAME'" 'BLOCKS*2352' -1 'i' r 'left(SONGINFO,5)"   "substr(SONGINFO,9,20)
  172.       lister set handle display name size comment
  173.       lister refresh handle full
  174.    end
  175.    address 'JUKEBOX.0'
  176.    TOC 0
  177.    if RC>0 then do  /* wurde CD ausgeworfen ? */
  178.     address value portname
  179.     lister set handle busy off
  180.     lister clear handle
  181.     lister refresh handle full
  182.     iterate     /* dann an Schleifen-Anfang, wo dies gemeldet wird */
  183.     end
  184.    cdtoc=result    /* CD merken für Vergleiche */
  185.    address value portname
  186.    lister set handle busy off
  187.  
  188.    if CDDA~=1 then do  /* CD nur Datentracks ?*/
  189.     lister set handle busy on
  190.     dopus request '"'getcatstr(21,'Fehler:'lf'CD enthält nur Datentracks !')'"' getcatstr(26,'Beenden|Ok')
  191.     if RC=1 then do
  192.            lister set handle busy off
  193.            call Ende
  194.            end
  195.     lister set handle busy off
  196.     lister clear handle
  197.     lister refresh handle full
  198.     iterate
  199.     end
  200.  
  201.    lister set handle handler 'playcdda-handler' 'quotes'
  202.  
  203.    /* install traps */
  204.    address value portname
  205.    dopus addtrap copy 'playcdda-handler'
  206.    dopus addtrap move 'playcdda-handler'
  207.    dopus addtrap copyas 'playcdda-handler'
  208.    dopus addtrap moveas 'playcdda-handler'
  209.    dopus addtrap delete 'playcdda-handler'
  210.    dopus addtrap rename 'playcdda-handler'
  211.    dopus addtrap devicelist 'playcdda-handler'
  212.    dopus addtrap parent 'playcdda-handler'
  213.    dopus addtrap show 'playcdda-handler'
  214.    dopus addtrap play 'playcdda-handler'
  215.    dopus addtrap protect 'playcdda-handler'
  216.    dopus addtrap datestamp 'playcdda-handler'
  217.    dopus addtrap comment 'playcdda-handler'
  218.    dopus addtrap makedir 'playcdda-handler'
  219.  
  220.    do forever
  221.      if waitpkt('playcdda-handler') then do
  222.        packet=getpkt('playcdda-handler')
  223.        if packet='00000000'x then iterate
  224.        event=getarg(packet,0)
  225.        handle=getarg(packet,1)
  226.        titel=getarg(packet,2)
  227.        user=getarg(packet,3)
  228.        pathstr=getarg(packet,4)
  229.        if event="Parent" then leave
  230.        if event="parent" then leave
  231.        if event="inactive" then call Ende
  232.        address 'JUKEBOX.0'
  233.        CURRENT STATUS
  234.        if result="NODISC" then leave /* CD wurde vor Play entnommen ! */
  235.        TOC 0
  236.        if RC>0 then leave
  237.        if result~=cdtoc then leave  /* CD wurde vertauscht ! */
  238.        T_FLAG=0
  239.         select
  240.           when event="doubleclick" then call Player
  241.           when event="Play" then call SelPlay
  242.           when event="path" then call SelPlay
  243.           when event="Show" then call CDTest
  244.           when event="Copy" then call SaveCD
  245.           when event="Move" then call SaveCD
  246.           when event="CopyAs" then call SaveCDAs
  247.           when event="MoveAs" then call SaveCDAs
  248.           when event="MakeDir" then iterate
  249.           when event="dropfrom" then call SaveCD
  250.           when event="drop" then iterate
  251.           otherwise call Productinfo
  252.         end
  253.        address value portname
  254.        reply(packet,10)
  255.      end
  256.      address 'JUKEBOX.0'
  257.      CURRENT STATUS
  258.      if result="NODISC" then leave /* CD wurde während Play entnommen ! */
  259.    end
  260.    address value portname
  261.    lister clear handle
  262.    lister refresh handle full
  263. end      /* Ende Schleife bei CD-Wechsel */
  264.  
  265. /*---Unterprogramm selektierte Titel spielen-----------------------------------------------------*/
  266. SelPlay:
  267. address value portname
  268. lister set handle busy on
  269. lister query handle selfiles stem files.
  270.  
  271. address 'JUKEBOX.0'
  272. LOCKGUI
  273. STOP
  274. do i=0 to files.count-1
  275.    titel=files.i
  276.    call Player
  277.    address 'JUKEBOX.0'
  278.    CURRENT TIME
  279.    waittime=result
  280.    CURRENT TRKTIME
  281.    SUBTIME result RESTTIME
  282.    trtime=result
  283.    ADDTIME waittime trtime
  284.    endtime=result
  285.    sec=left(trtime,2)*60+substr(trtime,4,2)
  286.    j=1
  287.    address value portname
  288.    lister set handle progress sec getcatstr(7,'Spiele Audio-CD ...  Titel')' 'i+1'/'files.count
  289.    lister refresh handle full  
  290.    do forever
  291.       address 'JUKEBOX.0'
  292.       CURRENT STATUS
  293.       if result~="PLAY" then leave /* CD wurde entnommen */
  294.       CURRENT RELTIME
  295.       SUBTIME trtime result
  296.       rsttime=result
  297.       ADDTIME waittime "00:01:00"
  298.       waittime=result
  299.       j=j+1
  300.       WAIT TIME waittime  
  301.       address value portname
  302.       lister set handle progress count j
  303.       lister set handle progress name left(rsttime,5)' 'substr(files.i,4,25)
  304.       lister query handle abort
  305.       if result then do
  306.         lister set handle busy off
  307.         lister clear handle progress
  308.         lister refresh handle full
  309.         address 'JUKEBOX.0'
  310.         STOP
  311.             UNLOCKGUI
  312.         return
  313.         end
  314.       if rsttime < "00:01:00" then do
  315.        WAIT TIME endtime
  316.        leave
  317.        end     
  318.    end
  319.    address value portname
  320.    lister select handle '"'files.i'"' off
  321.    lister clear handle progress
  322.    lister refresh handle full
  323. end
  324. lister set handle busy off
  325. address 'JUKEBOX.0'
  326. STOP
  327. UNLOCKGUI
  328. return
  329.  
  330. /*---Unterprogramm Play -------------------------------------------------------------------------*/
  331. Player:
  332. address 'JUKEBOX.0'
  333. SET TRACK left(titel,2)
  334. if getcatstr(6,'Daten Track') = substr(titel,4) then return  /* Datentrack return */
  335. CURRENT VOLUME RESOLUTION
  336. if (CDROMVOLUME<result) & (CDROMVOLUME>0) then do
  337.    CHANNEL BOTH
  338.    SET VOLUME CDROMVOLUME CDROMVOLUME
  339.    end
  340. PLAY
  341. return
  342.  
  343. /*---Unterprogramm Titel anspielen---------------------------------------------------------------*/
  344. CDTest:
  345. address value portname
  346. dopus request '"'getcatstr(8,'Audio-CD anspielen:'lf''lf'Die Titel anspielen für wie lang ?')'"' getcatstr(9,'15s|30s|45s|Abbruch')
  347. if RC=0 then return
  348. if RC=1 then sptime="00:15:00"
  349. if RC=2 then sptime="00:30:00"
  350. if RC=3 then sptime="00:45:00"
  351.  
  352. address value portname
  353. lister set handle busy on
  354. lister query handle selfiles stem files.
  355.  
  356. address 'JUKEBOX.0'
  357. LOCKGUI
  358. STOP
  359. do i=0 to files.count-1
  360.    titel=files.i
  361.    call Player
  362.    address 'JUKEBOX.0'
  363.    CURRENT TIME
  364.    waittime=result
  365.    CURRENT TRKTIME
  366.    SUBTIME result RESTTIME
  367.    trtime=result
  368.    if sptime<trtime then trtime=sptime
  369.    sec=left(trtime,2)*60+substr(trtime,4,2)
  370.    j=1
  371.    address value portname
  372.    lister set handle progress sec getcatstr(10,'Spiele Titel kurz an ...  Titel')' 'i+1'/'files.count
  373.    lister refresh handle full  
  374.    do forever
  375.       address 'JUKEBOX.0'
  376.       CURRENT STATUS
  377.       if result~="PLAY" then leave /* CD wurde entnommen */
  378.       CURRENT RELTIME
  379.       SUBTIME trtime result
  380.       rsttime=result
  381.       ADDTIME waittime "00:01:00"
  382.       waittime=result
  383.       j=j+1
  384.       WAIT TIME waittime  
  385.       address value portname
  386.       lister set handle progress count j
  387.       lister set handle progress name left(rsttime,5)' 'substr(files.i,4,25)
  388.       lister query handle abort
  389.       if result then do
  390.         lister set handle busy off
  391.         lister clear handle progress
  392.         lister refresh handle full
  393.         address 'JUKEBOX.0'
  394.         STOP
  395.             UNLOCKGUI
  396.         return
  397.         end
  398.       if rsttime = "00:00:00" then leave
  399.    end
  400.    address value portname
  401.    lister select handle '"'files.i'"' off
  402.    lister clear handle progress
  403.    lister refresh handle full
  404. end
  405. lister set handle busy off
  406. address 'JUKEBOX.0'
  407. STOP
  408. UNLOCKGUI
  409. return
  410.  
  411. /*---Unterprogramm Titel speichern---------------------------------------------------------------*/
  412. SaveCDAs:
  413. T_FLAG=1
  414. SaveCD:
  415. address 'JUKEBOX.0'
  416. INQUIRY
  417. CDROM=substr(result,9,4)
  418.  
  419. if showlist("H","CDDA")~=1 & exists(CDDA_FS) then address command "mount "CDDA_FS  /* CDDA Filesystem (Jukebox) mounten */
  420.  
  421. address value portname
  422. select
  423.     when CDROM="TOSH" & showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' '8SVX|MONO|AIFF|RAW|WAVE|VOC|AU|ADPCM3|'getcatstr(12,'Abbruch')
  424.     when CDROM="SONY" & showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' '8SVX|MONO|AIFF|RAW|WAVE|VOC|AU|'getcatstr(12,'Abbruch')
  425.     when showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'AIFF|RAW|WAVE|VOC|AU|'getcatstr(12,'Abbruch')
  426.     when CDROM="TOSH" then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' '8SVX|MONO|AIFF|ADPCM3|'getcatstr(12,'Abbruch')
  427.     when CDROM="SONY" then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' '8SVX|MONO|AIFF|'getcatstr(12,'Abbruch')
  428.     otherwise do
  429.     dopus request '"'getcatstr(17,'Fehler:'lf'CDDA V1.12 unterstützt nur SONY & TOSHIBA CDROM-Laufwerke.'lf'Für NEC, Hitachi, Pioneer, Sanyo etc. bitte das CDDA-Filesystem installieren.')'"' getcatstr(16,'Zurück')
  430.     return
  431.     end
  432. end
  433. SP_FLAG=RC
  434.  
  435. if SP_FLAG=0 then return
  436.  
  437. if (SP_FLAG=4 & showlist("H","CDDA")~=1) | SP_FLAG=8 then do
  438.     if ~exists(CDRip) then do
  439.        dopus request '"'getcatstr(14,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm CDRipper (aktueller Pfad %s ) wurde nicht gefunden.',CDRip)'"' getcatstr(16,'Zurück')
  440.        return
  441.            end
  442.    FT=".adpcm3"
  443.    end
  444.    else do
  445.    if (SP_FLAG=1 | SP_FLAG=2 | SP_FLAG=3) & (CDROM="TOSH" | CDROM="SONY") then do
  446.     if ~exists(CDSave) then do
  447.        dopus request '"'getcatstr(14,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm CDDA V1.12 (aktueller Pfad %s ) wurde nicht gefunden.',CDSave)'"' getcatstr(16,'Zurück')
  448.        return
  449.            end
  450.     call open('file','ENV:CDDA_DEVICE',W)
  451.     call writech('file',DEVICE)
  452.     call close ('file')
  453.     call open('file','ENV:CDDA_UNIT',W)
  454.     call writech('file',UNIT)
  455.     call close ('file')
  456.        end
  457.        else do
  458.        if (CDROM~="SONY" & CDROM~="TOSH" & showlist("H","CDDA")=1) then SP_FLAG=SP_FLAG+2
  459.        if ~exists(Amisox) & SP_FLAG~=4 then do
  460.        dopus request '"'getcatstr(15,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm AmiSOX (aktueller Pfad %s ) wurde nicht gefunden.'lf'Wählen Sie Speichern als RAW.',Amisox)'"' getcatstr(16,'Zurück')
  461.        return
  462.        end
  463.    end
  464.    if SP_FLAG=1 then FT=".8svx"
  465.    if SP_FLAG=2 then FT=".mono"
  466.    if SP_FLAG=3 then FT=".aiff"
  467.    if SP_FLAG=4 then FT=".cdr"
  468.    if SP_FLAG=5 then FT=".wave"
  469.    if SP_FLAG=6 then FT=".voc"
  470.    if SP_FLAG=7 then FT=".au"
  471.  
  472. address 'JUKEBOX.0'
  473. STOP
  474. LOCKGUI
  475. address value portname
  476. lister set handle busy on
  477. lister set user busy on
  478. if event='dropfrom' then do
  479.    files.count=1
  480.    LNG=POS('22'x,titel,2)-1
  481.    titel=left(titel,LNG)
  482.    files.0=right(titel,LNG-1)
  483.    end
  484.    else lister query handle selfiles stem files.
  485. lister set handle progress files.count getcatstr(18,'Speichere Audiodaten ...')
  486. lister refresh handle full  
  487. lister query user path
  488. Zielpfad=result
  489.  
  490. do i=0 to files.count-1
  491.    titel=strip(left(substr(files.i,4),24))
  492.    tracknr=strip(left(files.i,2),"B"," ")
  493.    if length(tracknr)=1 then tracknr="0"tracknr
  494.    if titel=cdstring then titel="track"tracknr
  495.    address value portname
  496.    lister set handle progress count i+1
  497.    lister set handle progress name titel||FT
  498.    lister query handle abort
  499.    if result then leave
  500.    if getcatstr(6,'Daten Track') ~= substr(files.i,4) then do  /* Datentrack überspringen */
  501.      if T_FLAG=1 then do
  502.        command beep
  503.        dopus getstring '"'getcatstr(13,'Bitte neuen Namen eingeben')'"' 24 '"'titel'"' 'OK|'getcatstr(12,'Abbruch') 
  504.        if DOPUSRC=0 then leave
  505.        ttitel=result
  506.        if ttitel~="RESULT" then titel=ttitel
  507.           lister set handle progress name titel||FT
  508.        end 
  509.     if CDROM="TOSH" | CDROM="SONY" then do
  510.            if FT=".aiff" then address command CDSave||" TRACK="||left(files.i,2)||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE"
  511.            if FT=".8svx" then address command CDSave||" TRACK="||left(files.i,2)||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX"
  512.            if FT=".mono" then address command CDSave||" TRACK="||left(files.i,2)||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX MONO"
  513.        end
  514.      else do
  515.            if FT=".aiff" then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -taiff  "'"'||Zielpfad||titel||FT'"'
  516.        end
  517.         if FT=".adpcm3" then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit
  518.     if FT=".cdr"  then address command "copy CDDA:track"tracknr" to "'"'||Zielpfad||titel||FT'"'||" QUIET"
  519.         if FT=".wave" then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -twav "'"'||Zielpfad||titel||FT'"'
  520.         if FT=".voc"  then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -tvoc "'"'||Zielpfad||titel||FT'"'
  521.         if FT=".au"   then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -U -r8000 "'"'||Zielpfad||titel||FT'"'
  522.      address command "FILENOTE "||'"'Zielpfad||titel||FT'"'||" "||'"'CDNAME'"'
  523.      end
  524.    lister select handle '"'files.i'"' off
  525.    lister refresh handle full
  526. end
  527.  
  528. lister set handle busy off
  529. lister set user busy off
  530. lister read user Zielpfad force
  531. lister refresh user full
  532. address 'JUKEBOX.0'
  533. UNLOCKGUI
  534. return
  535.  
  536. /*---Unterprogramm Copyright---------------------------------------------------------------------*/
  537. Productinfo:
  538. address 'JUKEBOX.0'
  539. INQUIRY
  540. CDROM=substr(result,9)
  541. CURRENT LABEL
  542. cdlabel=result
  543. CURRENT CDTIME
  544. cdgesamt=result
  545. GETATTR VERSION FULL
  546. Jukeversion=result
  547. GETATTR PROJECT FILENAME
  548. Projekt=result
  549. GETATTR PLAYER
  550. Playmod=result
  551. address value portname
  552. do forever
  553.   dopus request '"'getcatstr(19,'Über')' PlayCDDA_JB.dopus5 V1.0:'lf'Copyright ©1995 Eckhard Ludwig'lf'Freely distributable release'lf''lf''Jukeversion'"' getcatstr(23,'Beenden|Über CDROM|Hilfe|Ok')
  554.   if RC=0 then return
  555.   if RC=1 then call Ende
  556.   if RC=2 then do
  557.    dopus request '"'"CDROM="CDROM||lf"Player="Playmod||lf"Device="Device"  Unit="Unit||lf||lf||"Project="Projekt||lf||getcatstr(24,'CD Katalogtitel=%s'lf'CD Gesamtspieldauer=%s',cdlabel,cdgesamt)'"' getcatstr(16,'Zurück')
  558.    end
  559.   else dopus request '"'getcatstr(22,'PlayCDDA_JB.dopus5 Kurzhilfe:'lf'Parent: CD neu einlesen'lf'Doppelklick: Spielen ab geklickten Titel'lf'Abspielen: Spiele alle selektierten Titel'lf'Anzeigen: Spiele alle selektierten Titel kurz an'lf'Kopieren: Selektierte Titel speichern')'"' getcatstr(16,'Zurück')
  560. end
  561. /*---Unterprogramm Audio-CD einlegen-------------------------------------------------------------*/
  562. Meldung1:
  563.   address value portname
  564.   dopus request '"'getcatstr(25,'Fehler:'lf'Bitte eine Audio-CD einlegen')'"' getcatstr(26,'Beenden|Ok')
  565.   if RC=1 then call Ende
  566.   do i= 1 to 90  /* wait max 90sec */
  567.      address value portname
  568.      lister query handle busy /* wurde inzwischen Lister geschlossen ?*/
  569.      if RC>0 then leave
  570.      address 'JUKEBOX.0'     
  571.      MAXTRACK=numtrks()
  572.      if MAXTRACK>0 then return
  573.      WAIT ABSOLUTE '00:01:00'
  574.   end
  575. /*---Unterprogramm Programm beenden--------------------------------------------------------------*/
  576. Ende:
  577. address value portname
  578. lister close handle
  579. dopus remtrap '*' 'playcdda-handler'
  580. call closeport('playcdda-handler')
  581. address 'JUKEBOX.0'
  582. if CDDA=1 then EJECT
  583. exit
  584. /*---Unterprogramm Tracks ermitteln--------------------------------------------------------------*/
  585. numtrks:
  586. TOC stem names.
  587. if rc=0 then return(names.0-1)
  588. else return(0)
  589. /*---Unterprogramm Lokalisierung (Dank an Edmund Vermeulen)--------------------------------------*/
  590. getcatstr:
  591.    parse arg msgno,msgstring,insert.1,insert.2
  592.    if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring)
  593.    j=0
  594.    do while pos('%s',msgstring)>0
  595.       parse var msgstring fore '%s' aft
  596.       j=j+1
  597.       msgstring=fore||insert.j||aft
  598.       end
  599.    return msgstring
  600. /*---Unterprogramm Syntaxfehler------------------------------------------------------------------*/
  601. syntax:
  602. if rc=13 then call Ende /* Jukebox wurde über GUI beendet */
  603. say 'Syntax Error' rc',' errortext(rc) 'in line' sigl'.'
  604. return
  605.